{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "90d29414",
   "metadata": {},
   "source": [
    "## FIR滤波器设计频率取样法"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e8630d63",
   "metadata": {},
   "source": [
    "- 例：使用第一种频率抽样法设计一个线性相位低通滤波器，要求通带截止频率$w_p=0.2\\pi$，阻带截止频率$w_s=0.3\\pi$，阻带最小衰减$A_s=40dB$。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "eab34115",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#导入使用的库\n",
    "import numpy as np;from math import *\n",
    "from scipy import signal, fftpack\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.ticker import MaxNLocator\n",
    "\n",
    "#输入采样后的|Hk|序列\n",
    "N = 40 #采样点数\n",
    "Hrs1 = np.ones(5);Hrs2 = np.zeros(29);Hrs3 = np.ones(4)\n",
    "T = np.array([0.39]) #在过渡带设置H（k）=0.39\n",
    "Hrs = np.concatenate((Hrs1,T,Hrs2,T,Hrs3))\n",
    "\n",
    "#计算Hk的相位，得出Hk的表达式\n",
    "alpha = (N-1)/2;d = np.floor(alpha)+1\n",
    "k1 = np.arange(d);k2 = np.arange(d,N)\n",
    "angH1 = -alpha*(2*pi)*k1/N;angH2 = alpha*(2*pi)*(N-k2)/N\n",
    "angH = np.concatenate((angH1,angH2))\n",
    "HK = Hrs*np.exp(1j*angH) #Hk的表达式\n",
    "\n",
    "#计算滤波器的频率响应\n",
    "hn = np.real(fftpack.ifft(HK));w,He = signal.freqz(hn,1)\n",
    "\n",
    "#绘制滤波器的幅度响应\n",
    "fig,ax = plt.subplots();ax.plot(w/pi,20*np.log10(abs(He)))\n",
    "ax.set_title('频率采样法设计的FIR低通滤波器的幅度响应');ax.grid()\n",
    "ax.xaxis.set_major_locator(MaxNLocator(11))\n",
    "ax.yaxis.set_major_locator(MaxNLocator(11))\n",
    "ax.set_xlabel(r'$ \\omega / \\pi $')\n",
    "ax.set_ylabel(r'$ 20log_{10}| H (e^{j \\omega}) | $')\n",
    "ax.set_xlim([0,1]);ax.set_ylim([-100,1])\n",
    "plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签\n",
    "plt.rcParams['axes.unicode_minus'] = False #用来显示负号\n",
    "#fig.savefig('./fir_freq_samp1.png',dpi=500)\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
